#pragma once

#include "instructions/base/instructions.h"
#include "rtda/frame.h"

namespace jvm {
    namespace instructions {

        class AASTORE : public NoOperandsInstruction {
        public:
            void execute(std::shared_ptr<rtda::Frame> pframe) override;
        };

        class BASTORE : public NoOperandsInstruction {
        public:
            void execute(std::shared_ptr<rtda::Frame> pframe) override;
        };

        class CASTORE : public NoOperandsInstruction {
        public:
            void execute(std::shared_ptr<rtda::Frame> pframe) override;
        };

        class DASTORE : public NoOperandsInstruction {
        public:
            void execute(std::shared_ptr<rtda::Frame> pframe) override;
        };

        class FASTORE : public NoOperandsInstruction {
        public:
            void execute(std::shared_ptr<rtda::Frame> pframe) override;
        };

        class IASTORE : public NoOperandsInstruction {
        public:
            void execute(std::shared_ptr<rtda::Frame> pframe) override;
        };

        class LASTORE : public NoOperandsInstruction {
        public:
            void execute(std::shared_ptr<rtda::Frame> pframe) override;
        };

        class SASTORE : public NoOperandsInstruction {
        public:
            void execute(std::shared_ptr<rtda::Frame> pframe) override;
        };

        //namespace utils {
        //    void checkNotNil(std::shared_ptr<heap::Object> ref);
        //    void checkIndex(size_t arrLen, int32_t index);
        //} // namespace utils

    } // namespace instructions
}// namespace jvm